#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：python_learning 
@File ：迭代器模式.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/3/2 0:02 
"""

"""
迭代器模式是一种行为型设计模式，它允许在不暴露集合内部结构的情况下顺序访问集合中的元素。这种模式在实际编程中非常常见，例如在遍历数组、链表、树等数据结构时都可以使用迭代器模式。

下面是一个简单的示例，演示了如何实现一个基本的迭代器模式：

在这个示例中，Iterator 定义了迭代器的接口，包括 has_next 和 next 方法。ListIterator 是具体的迭代器实现，它实现了对列表进行迭代的逻辑。Iterable 定义了可迭代对象的接口，包括 create_iterator 方法。ListCollection 是具体的可迭代对象实现，它实现了对列表进行管理，并且能够创建对应的迭代器。

通过这种设计，我们可以将对集合的遍历逻辑从集合本身中分离出来，使得集合和遍历逻辑可以独立变化，提高了代码的灵活性
"""


# 定义迭代器接口
class Iterator:
	def has_next(self):
		pass

	def next(self):
		pass


# 具体迭代器实现
class ListIterator(Iterator):
	def __init__(self, collection):
		self.collection = collection
		self.index = 0

	def has_next(self):
		return self.index < len(self.collection)

	def next(self):
		if self.has_next():
			item = self.collection[self.index]
			self.index += 1
			return item
		else:
			raise StopIteration()


# 定义可迭代对象接口
class Iterable:
	def create_iterator(self):
		pass


# 具体可迭代对象实现
class ListCollection(Iterable):
	def __init__(self):
		self.items = []

	def add_item(self, item):
		self.items.append(item)

	def create_iterator(self):
		return ListIterator(self.items)


# 使用示例
collection = ListCollection()
collection.add_item("Item 1")
collection.add_item("Item 2")
collection.add_item("Item 3")

iterator = collection.create_iterator()

while iterator.has_next():
	item = iterator.next()
	print(item)
